\chapter{Volba technologie pro tvorbu desktopových aplikací} 

% Winforms vs WPF
V této kapitole budou popsány různé přístupy tvorby desktopových aplikací ve frameworku .NET. Původní aplikace je psána v technologii Windows Presentation Foundation (zkrázeně WPF) od společnosti Microsoft. Desktopové aplikace lze psát i pomocí starší technologie Windows Forms.

\section{Windows Forms}
Windows Forms technologie je ekvivalentem technologie Abstract Window Toolkit (zkráceně AWT) v Java API. Tato technologie se objevila již u prvních verzí .NET frameworku a umožňuje snadné tvoření okenních aplikací. 

WinForms mají strmou křivku učení a pro programátory, kteří přechází z Javy o mnoho jednodušší. Aplikace založené na této technologii jsou událostně řízeny, tedy každá akce ,,aktivuje'' sadu událostí a je jen na programátorovi, zda se na dané události zaregistruje a bude na ně reagovat či ne.\cite{wikiForms}
Mezi nesporné výhody také patří to, že tato technologie je léty prověřená a mnoho programátorů s ní má zkušenosti. 

Technologie je také přenositelná i na linuxovou platformu pomocí projektu Mono \cite{mono}. Společnost Microsoft technologii \textit{Windows Forms} považuje za dostatečně vyspělou a jejímu vývoji již nadále nevěnuje pozornost.

\section{WPF} \label{sec:wpf}
Naproti tomu technologie WPF přišla s .net frameworkem 3.0 a snaží se řešit neduhy technologie Windows Forms. WPF je technologie, která přináší mnoho změn a naučit se ji, znamená pochopit zcela jiný přístup k programovaní desktopových aplikací.

WPF technologie je plně hardwarově akcelerovaná a vykreslována pomocí Direct3D. Veškerá grafika je tvořena vektorově, což znamená, že výsledná aplikace je nezávislá na rozlišení. Závislost na vykreslovací vrstvě Direct3D s sebou přináší i jednu nevýhodu, závislost na operačním systému Windows.
WPF technologie dále plně odděluje design od výkonného kódu a to tak, že zavádí XAML, jazyk, založený na XML sloužící k definici uživatelského rozhraní (zkráceně UI). Designéři tak mohou paralelně pracovat s programátory, každý nezávisle na jiné vrstvě \cite{wikiWPF}.

Díky přepracovanému objektovému modelu lze také snadněji měnit vzhled grafických komponent či dokonce celého okna pomocí stylů či šablon.
Mezi nejdůležitější změny je nutné zahrnout také binding, tedy možnost provázat uživatelské rozhraní s výkonným kódem tak, aby obě vrstvy byly na sobě nezávislé. \cite{oreaillybook}

Tato technologie je propagována společností Microsoft. Delší křivku učení kompenzuje znovupoužitelnost nabytých znalostí i pro další technologie jako je například Silverlight, Windows Phone a aplikace na systém Windows RT.

\subsection{XAML} \label{sec:xaml}

XAML je značkovací jazyk. Jedná se o XML derivát, podobně jako např. HTML jazyk. Slouží k popisu uživatelského rozhraní aplikace. Cokoliv zapsané v jazyce XAML je možné zapsat i v jazyce C\#. Zkompilované XAML a C\# soubory obsahující totožné prvky uživatelského rozhraní se nijak neliší. Vše zapsané pomocí jazyka XAML má svůj ekvivalent v jazyce C\#. Důvodem k jeho využití je jednak striktní oddělení aplikační logiky od jejího rozhraní (vzhled je snadno modifikovatelný a přístupný bez vlivu na logiku), především však je to XML struktura jazyka XAML, díky které může být obsah libovolně zpracováván v komplexních vývojových prostředích (Microsoft Expression Studio). S využitím knihoven WPF, pro které byl ostatně jazyk XAML navržen, lze vytvářet jakýkoliv vektorový grafický obsah a dále jej využít v aplikaci. Pomocí jazyka C\# lze (přirozeně) též přistupovat k WPF knihovnám, děje se tak ale pouze pokud je třeba obsah dynamicky měnit za běhu aplikace, definice rozsáhlých statických struktur je možná, ale velmi nepohodlná. \cite{kraft}

